home *** CD-ROM | disk | FTP | other *** search
- #include "txtcvt.h"
-
- /**********************************
- Get 2-byte lohi value from file
- ***********************************/
-
- int get2byte(FILE *ifp, int offset)
- {
- int value = -1;
- int r;
- int hi;
- int lo;
-
- r = fseek(ifp, offset, SEEK_SET);
- if(r != -1) {
- lo = fgetc(ifp);
- if(lo != EOF) {
- hi = fgetc(ifp);
- if(hi != EOF) {
- value = hi * 256 + lo;
- }
- }
- }
- return(value);
- }
-
- /********************************
- Read Microsoft text file
- ********************************/
-
- void readmsfile(FILE *ifp, FILE *ofp, int filetype)
- {
- unsigned int c;
- int r;
- int size;
- int offset;
- int hdrsize;
- int textoffset;
- int written;
-
- switch (filetype) {
- case DOSWORD: {
- offset = 14;
- hdrsize = 128;
- break;
- }
- case WINWORD1: {
- offset = 28;
- hdrsize = 384;
- break;
- }
- case WINWORD2: {
- offset = 28;
- hdrsize = 384;
- break;
- }
- case WINWRITE: {
- offset = 14;
- hdrsize = 128;
- break;
- }
- }
-
- size = get2byte(ifp, offset) - hdrsize;
- if(size == 0) {
- printf("Unable to process inputfile\n");
- }
- else {
- printf("Length of text: %i\n", size);
- }
-
- switch (filetype) {
- case DOSWORD: {
- textoffset = 128;
- break;
- }
- case WINWORD1: {
- textoffset = get2byte(ifp, 24);
- break;
- }
- case WINWORD2: {
- textoffset = get2byte(ifp, 24);
- break;
- }
- case WINWRITE: {
- textoffset = 128;
- break;
- }
- }
- if(textoffset == 0) {
- printf("Unable to process inputfile\n");
- }
- else {
- printf("Start of text: %i\n", textoffset);
- }
-
- r = fseek(ifp, textoffset, SEEK_SET);
- if(r != -1) {
- c = fgetc(ifp);
- r = 0;
- written = 0;
- while(c != EOF && r != EOF && written < size) {
- written++;
- switch (c) {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- case 12: /* explicit page break */
- case 14:
- case 16:
- case 17:
- case 18:
- case 19:
- case 20:
- case 21:
- case 22:
- case 23:
- case 24:
- case 25:
- case 26:
- case 27:
- case 28:
- case 29:
- case 31:
- break;
- case 11: { /* Hard line break */
- r = fputc(13, ofp);
- if(r != EOF) {
- r = fputc(10, ofp);
- }
- break;
- }
- case 15: { /* em-hyphen to hyphen */
- if(filetype == DOSWORD || filetype == WINWORD1 || filetype == WINWORD2) {
- r = fputc(45, ofp);
- if(r != EOF) {
- r = fputc(45, ofp);
- }
- }
- break;
- }
- case 30: { /* nonbreaking hyphen */
- if(filetype == WINWORD1 || filetype == WINWORD2) {
- r = fputc(45, ofp);
- }
- break;
- }
- case 160: { /* nonbreaking space */
- if(filetype == WINWORD1 || filetype == WINWORD2) {
- r = fputc(32, ofp);
- }
- else {
- r = fputc(c, ofp);
- }
- break;
- }
- case 196: { /* nonbreaking hyphen */
- if(filetype == DOSWORD) {
- r = fputc(45, ofp);
- }
- else {
- r = fputc(c, ofp);
- }
- break;
- }
- case 255: { /* nonbreaking space */
- if(filetype == DOSWORD) {
- r = fputc(32, ofp);
- }
- else {
- r = fputc(c, ofp);
- }
- break;
- }
- default: {
- r = fputc(c, ofp);
- break;
- }
- }
- c = fgetc(ifp);
- }
- if(r == EOF) {
- printf("Error %d occurred while writing to outputfile.\n",errno);
- }
- }
- else {
- printf("Unable to process inputfile\n");
- }
- }
-